package se252.jan15.calvinandhobbes.project0;
import java.util.ArrayList;
import java.util.List;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpledb.AmazonSimpleDB;
import com.amazonaws.services.simpledb.AmazonSimpleDBClient;
import com.amazonaws.services.simpledb.model.Attribute;
import com.amazonaws.services.simpledb.model.BatchPutAttributesRequest;
import com.amazonaws.services.simpledb.model.DeleteAttributesRequest;
import com.amazonaws.services.simpledb.model.Item;
import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
import com.amazonaws.services.simpledb.model.ReplaceableItem;
import com.amazonaws.services.simpledb.model.SelectRequest;
public class SDBConn {
public static AmazonSimpleDB sdb=null;
public static String cat="se252j15-category";
public static String poi="se252j15-pointofinterest";
public static String accessKey=" AKIAJQRRB6CJJKGYGBQQ";
public static String secretKey="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";
public static void initSDB() {
AWSCredentials credentials=new BasicAWSCredentials(accessKey,secretKey);
sdb = new AmazonSimpleDBClient(credentials);
sdb.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1));
}
public static LayerInfo[] getCategoryInfo(String category) {
LayerInfo[] layerArray = null;
ArrayList<LayerInfo> layers = new ArrayList<LayerInfo>();
try{
String catId=null;
String queryStr1 = "select CatId from `"+cat+ "` where CatName = '"+category+"'";
SelectRequest selectRequest = new SelectRequest(queryStr1);
for (Item item : sdb.select(selectRequest).getItems()) {
for (Attribute attribute : item.getAttributes()) {
if(attribute.getName().equals("CatId"))
{
catId=attribute.getValue();
break;
}
}
}
String queryString="select * from `"+poi+"` where CatId= '"+catId+"'";
SelectRequest selectRequest1 = new SelectRequest(queryString);
for (Item item1 : sdb.select(selectRequest1).getItems()) {
LayerInfo lf = new LayerInfo();
lf.setCategory(category);
for (Attribute attribute : item1.getAttributes()) {
switch (attribute.getName()) {
case "Name":lf.setName(attribute.getValue());
break;
case "Latitude":lf.setLatitude(Float.parseFloat(attribute.getValue()));
break;
case "Longitude":lf.setLongitude(Float.parseFloat(attribute.getValue()));
break;
case "Address":lf.setAddress(attribute.getValue());
break;
case "Description":lf.setAddress(attribute.getValue());
break;
default:
break;
}
}
layers.add(lf);
}
}
catch(Exception e) {
System.out.println(e);
}
layerArray = new LayerInfo[layers.size()];
layers.toArray(layerArray);
return layerArray;
}
public static LayerInfo[] getCategories() {
if(sdb==null){
AWSCredentials credentials=new BasicAWSCredentials(accessKey,secretKey);
sdb = new AmazonSimpleDBClient(credentials);
sdb.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1));
}
LayerInfo[] layerArray = null;
ArrayList<LayerInfo> layers = new ArrayList<LayerInfo>();
try {
String queryString = "select CatName from `"+cat+"`";
SelectRequest selectRequest = new SelectRequest(queryString);
LayerInfo lf = new LayerInfo();
lf.setName("Dining Outside");
lf.setCategory("");
lf.setLatitude(0);
lf.setLongitude(0);
lf.setDescription("");
layers.add(lf);
for (Item item : sdb.select(selectRequest).getItems()) {
lf = new LayerInfo();
lf.setCategory("");
lf.setLatitude(0);
lf.setLongitude(0);
lf.setDescription("");
for (Attribute attribute : item.getAttributes()) {
if(attribute.getName().equals("CatName"))
lf.setName(attribute.getValue());
}
layers.add(lf);
}
}
catch(Exception e) {
System.out.println(e);
}
layerArray = new LayerInfo[layers.size()];
layers.toArray(layerArray);
return layerArray;
}
public static boolean insertLayer(LayerInfo layer) {
if(sdb==null){
AWSCredentials credentials=new BasicAWSCredentials(accessKey,secretKey);
sdb = new AmazonSimpleDBClient(credentials);
sdb.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1));
}
boolean ret = true;
String catId = null;
String queryStr = "select CatId from `"+cat+ "` where CatName = '"+layer.getCategory()+"'";
SelectRequest selectRequest = new SelectRequest(queryStr);
for (Item item : sdb.select(selectRequest).getItems()) {
for (Attribute attribute : item.getAttributes()) {
if(attribute.getName().equals("CatId"))
{
catId=attribute.getValue();
break;
}
}
}
try {
List<ReplaceableItem> Data = new ArrayList<ReplaceableItem>();
Data.add(new ReplaceableItem().withName(catId+"_"+layer.getName()).withAttributes(
new ReplaceableAttribute().withName("Name").withValue(layer.getName()),
new ReplaceableAttribute().withName("CatId").withValue(catId),
new ReplaceableAttribute().withName("Latitude").withValue(String.valueOf(layer.getLatitude())),
new ReplaceableAttribute().withName("Longitude").withValue(String.valueOf(layer.getLongitude())),
new ReplaceableAttribute().withName("Address").withValue(layer.getAddress()),
new ReplaceableAttribute().withName("Description").withValue(layer.getDescription()))
);
sdb.batchPutAttributes(new BatchPutAttributesRequest(poi, Data));
}
catch(Exception e) {
ret = false;
System.out.println(e);
}
return ret;
}
public static boolean deleteLayer(LayerInfo layer) {
if(sdb==null){
AWSCredentials credentials=new BasicAWSCredentials(accessKey,secretKey);
sdb = new AmazonSimpleDBClient(credentials);
sdb.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1));
}
boolean ret = true;
String Id = null;
String queryStr1="select CatId from `"+cat+"` where CatName= '"+layer.getCategory()+"' ";
String cid=null;
SelectRequest selectRequest = new SelectRequest(queryStr1);
for (Item item : sdb.select(selectRequest).getItems()) {
for (Attribute attribute : item.getAttributes()) {
if(attribute.getName().equals("CatId"))
{
cid=attribute.getValue();
break;
}
}
}
String queryStr="select Id from `"+ poi+"` where CatId= '"+cid+"' AND Name = '"+layer.getName()+"'";
SelectRequest selectRequest1 = new SelectRequest(queryStr);
for (Item item : sdb.select(selectRequest1).getItems()) {
for (Attribute attribute : item.getAttributes()) {
if(attribute.getName().equals("Id"))
{
Id=attribute.getValue();
break;
}
}
}
try {
sdb.deleteAttributes(new DeleteAttributesRequest(poi,Id));
}
catch(Exception e) {
System.out.println(queryStr);
ret = false;
System.out.println(e);
}
return ret;
}
/*public static boolean updateLayer(LayerInfo layer, String oldName) {
boolean ret = true;
try{
if(sdb==null){
AWSCredentials credentials=new BasicAWSCredentials(accessKey,secretKey);
sdb = new AmazonSimpleDBClient(credentials);
sdb.setRegion(Region.getRegion(Regions.AP_SOUTHEAST_1));
}
String newName=layer.getName();
layer.setName(oldName);
deleteLayer(layer);
layer.setName(newName);
insertLayer(layer);
String catId = null;
String oname=null;
String old_id=layer.getCategory()+"_"+oldName;
String queryStr = "select * from `"+poi+"` where Id = '"+old_id+"' c.catId=p.catId";
SelectRequest selectRequest = new SelectRequest(queryStr);
for (Item item : sdb.select(selectRequest).getItems()) {
for (Attribute attribute : item.getAttributes()) {
if(attribute.getName().equals("CatId"))
catId=attribute.getValue();
if(attribute.getName().equals("Name"))
oname=attribute.getValue();
}
}
}
catch(Exception e) {
System.out.println();
ret = false;
System.out.println(e);
}
return ret;
}*/
}